package com.delio.server.pagos.empleados;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.delio.client.pagos.empleados.Empleado;
import com.delio.server.base.Conexion;
import com.delio.server.base.util.GxtGridPaginate;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;

public class Empleados {
	private static SqlMapClient sqlMap = null;
	public static Integer errorCode = 0;

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<Empleado> getPaginate(
			GxtGridPaginate paginate, String filter) {

		sqlMap = Conexion.getSqlMap();

		paginate.setLimit();

		if (paginate.order.equals(""))
			paginate.order = " order by id desc";

		if (filter != null)
			paginate.condition = " and dni ILIKE '%" + filter
					+ "%' OR nombres ILIKE '%" + filter
					+ "%' OR apellidos ILIKE '%" + filter + "%'";

		List<Empleado> data = null;
		try {
			data = sqlMap.queryForList("paginateEmpleado", paginate);
		} catch (SQLException e) {
			e.printStackTrace();

		}
		return new BasePagingLoadResult<Empleado>(data, paginate.offset,
				count(paginate));

	}

	private static Integer count(GxtGridPaginate paginate) {
		Integer cont = null;
		try {
			cont = (Integer) sqlMap.queryForObject("countEmpleado");

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cont;
	}

	public static boolean save(Empleado emp) {
		sqlMap = Conexion.getSqlMap();
		boolean respuesta = true;
		try {

			if (emp.getId() != null) {

				sqlMap.update("updateEmpleado", emp);

			} else {
				sqlMap.insert("insertEmpleado", emp);

			}


		} catch (SQLException e) {
			if (e.getSQLState().equalsIgnoreCase("23505"))
				errorCode = 2;
			else
				e.printStackTrace();

			respuesta = false;
		}

		return respuesta;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static boolean delete(Integer id) {

		boolean respuesta = true;

		sqlMap = Conexion.getSqlMap();
		try {
			if (id != null) {
		
				sqlMap.startTransaction();
				Map m = new HashMap(1);
				m.put("empleado_id", id);
				sqlMap.update("deleteEmpleado", m);
				sqlMap.commitTransaction();
				sqlMap.endTransaction();
				
			} else
				respuesta = false;

		} catch (SQLException e) {
			 if (e.getSQLState().equalsIgnoreCase("23503"))
			 errorCode = 1;
			 else
			e.printStackTrace();

			respuesta = false;

		}
		return respuesta;

	}

	public static boolean deleteAll(String ids) {
		boolean respuesta = true;

		sqlMap = Conexion.getSqlMap();
		try {
			if (!ids.equals(""))
				sqlMap.delete("deleteAllEmpleado", ids);
			else
				respuesta = false;

		} catch (SQLException e) {

			if (e.getSQLState().equalsIgnoreCase("23503"))
				errorCode = 1;
			else
				e.printStackTrace();

			respuesta = false;

		}
		return respuesta;

	}

}
